package com.renfei.jnithread.util;

public class PThread {

    static {
        System.loadLibrary("native-lib");
    }


    public native void createNormalThread();

    public native void createProduceAndConsumption();


    /**
     * C++主线程调用java方法(主线程调用)
     * <p>
     * step1
     * 根据jobject 获取jclass (静态方法不需要这一步)
     * env->GetObjectClass
     * step2
     * 获取jmethodid
     * env->GetMethodID
     * step3 调用java方法
     * env->CallVoidMethod
     */
    public native void callBackFromC();
    /**
     * JniEnv是线程相关的,所以子线程中不能使用创建线程的JniEnv;
     * 而是JVM是进程相关的,所以可以通过JVM来获取当前线程的JniEnv,然后就可以
     * 调用java方法了
     * <p>
     * C++调用java方法，子线程调用
     * <p>
     * 1、获取JVM对象  JNI_OnLoad
     * 2、通过JVM获取JniEnv
     * JniEnv *env
     * jvm->AttachCurrentThread(&env,0)
     * <p>
     * 调用java方法
     * jvm->DetachCurrentThread();
     */


    private onErrorListener onErrorListener;

    public void setOnErrorListener(PThread.onErrorListener onErrorListener) {
        this.onErrorListener = onErrorListener;
    }

    public void onError(int code, String msg) {
        if (null != onErrorListener) {
            onErrorListener.onError(code, msg);
        }
    }


    public interface onErrorListener {
        void onError(int code, String msg);
    }



}
